关于QT动态库,利用动态库导入界面(实例)

您所在的位置:网站首页 qt动态库加载 报错fmt 关于QT动态库,利用动态库导入界面(实例)

关于QT动态库,利用动态库导入界面(实例)

2024-07-13 06:00:12| 来源: 网络整理| 查看: 265

    最近需要搞懂一个事情,就是QT如何用使用动态库。我们需要解决以下几个问题:

1.有时候我们不希望在当前工程下设计界面,而是希望把界面做成一个动态链接库,然后主程序调用这个动态链接库,然后主程序把这个动态库中包含的界面show出来。

2.我们希望进行插件式开发,也就是说,把你设计好的界面放到Designer中,然后从Designer拖放到ui中。这种方式生成的插件只能在QtDesigner中使用,却不能在Qt Creator中使用,因为现在使用的Windows版本的QtCreator是使用VS的编译器生成的,而QtCreator 中编译项目使用的是MinGW/g++编译器。这一点我们可以不用管。

3.我们希望写一个方法,做成插件,然后在主程序中调用,这个插件继承自QObject。

    

    这三种问题,笔者作为一只小白,都已经解决了。下面的教程有不懂的,也可以当面联系我QQ 498771026,随时欢迎大家

    对于第一种,笔者自己研究了一下,一会放具体的教程上来。也可以参考博客:

     https://blog.csdn.net/chenchong_88/article/details/43374761

    对于第二种,大家请移驾:https://blog.csdn.net/lhl1124281072/article/details/80039223

    对于第三种,在QT的官方例子中已经有了,大家可以打开QtCretor直接看源码,附一张图。

我们需要解决的是第一种,废话不多说。走起。

环境是VS2013+QT5.5,没什么好说的。

首先右键工程添加新项目,用QtClassLibray新建,名字随便

属性自动为dll动态库,如果不是dll就改成dll。你也可以根据需要添加一些QT的常用库,比如QTCore什么的,比如说笔者的如下图。然后你会看到QT自动生成了一些文件。

有一个XXX_global.h文件

#pragma once #include #ifndef BUILD_STATIC # if defined(QTCLASSLIBRARYTEST_LIB) # define QTCLASSLIBRARYTEST_EXPORT Q_DECL_EXPORT # else # define QTCLASSLIBRARYTEST_EXPORT Q_DECL_IMPORT # endif #else # define QTCLASSLIBRARYTEST_EXPORT #endif

这就是像普通的动态库一样,定义了一些输出的宏。这个Q_DECL_EXPORT宏你也会在工程属性里的与处理器定义里面找到。自动生成的文件还有一个h文件,一个CPP文件,这两个文件就是你需要输出的自定义的Widget了,也就是说我们只需要修改它们就行了。首先是h文件:

#pragma once #include "qtclasslibrarytest_global.h" #include #include class QTCLASSLIBRARYTEST_EXPORT QtClassLibraryTest : public QWidget { Q_OBJECT public: explicit QtClassLibraryTest(QWidget * parent = 0); ~QtClassLibraryTest(); private slots: void onBtnClick(); private: QPushButton *m_btn; };

然后是相应的CPP:

#include "QtClassLibraryTest.h" #include #include #include #include QtClassLibraryTest::QtClassLibraryTest(QWidget * parent) :QWidget(parent) { this->resize(200, 200); QVBoxLayout*lay = new QVBoxLayout(); m_btn = new QPushButton(); QObject::connect(m_btn, SIGNAL(clicked()), this, SLOT(onBtnClick())); lay->addWidget(m_btn); this->setLayout(lay); } QtClassLibraryTest::~QtClassLibraryTest() { } void QtClassLibraryTest::onBtnClick() { QMessageBox*hehe = new QMessageBox(QMessageBox::Icon::Information, QString("hehe"), QString("ninja")); hehe->show(); }

很简单的一波操作,然后生成,应该是成功的。生成了三个文件,exp、lib、dll。下面就要在主程序中用了。

新建一个主程序,MainWindow什么的都好,然后可以自己写一个事件来调用。

那么我么需要做一些预处理工作,首先是在主程序中包含头文件,也就是你的QtClassLibraryTest.h所在的路径:

然后要包含你生成的这个lib所在的路径。对于笔者而言,位置如上图所示。没有什么不好懂的。然后就可以在你的事件中调用了。代码这样就行:

QtClassLibraryTest*hehe = new QtClassLibraryTest(); hehe->show();

生成成功,然后调用

都没有问题。

有任何问题可以直接联系本人QQ:498771026。欢迎大家讨论

 



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭